package com.android.net

import android.os.Environment
import android.util.Log
import com.android.net.api.ApiService
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
    val TAG = NetworkModule::class.java.simpleName
    /**
     * 提供一个配置了日志拦截器和断点续传支持的OkHttpClient实例
     *
     * 此函数使用了@Provides和@Singleton注解，表明它提供了一个应用级别的单例对象
     * OkHttpClient是一个高效的HTTP客户端，它可以支持HTTP/2、连接池、GZIP响应体压缩等特性
     * 日志拦截器用于捕获和记录HTTP请求和响应的详细信息，这对于调试和监控网络请求非常有用
     *
     * @return 配置了日志拦截器和断点续传支持的OkHttpClient实例
     */
    @Provides
    @Singleton
    fun provideOkHttpClient(): OkHttpClient {
        // 创建一个日志拦截器并设置其记录级别为BODY，这意味着拦截器将记录请求和响应的详细信息
        val loggingInterceptor = HttpLoggingInterceptor().apply {
            level = HttpLoggingInterceptor.Level.BODY
        }

        // 创建一个断点续传拦截器
        val rangeInterceptor = Interceptor { chain ->
            val request = chain.request()
            val response = chain.proceed(request)
            response.newBuilder()
                .addHeader("Accept-Ranges", "bytes")
                .build()
        }

        // 使用OkHttpClient.Builder来构建一个OkHttpClient实例，并添加日志拦截器和断点续传拦截器
        // 这里的配置使得所有的网络请求都会被日志拦截器捕获和记录，并支持断点续传
        return OkHttpClient.Builder()
            .addInterceptor(loggingInterceptor)
            .addInterceptor(rangeInterceptor)
            .build()
    }

    @Provides
    @Singleton
    fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
        val gson: Gson = GsonBuilder()
            .create()
        return Retrofit.Builder()
            .baseUrl("http://shengji.zhifapingtai.com/api/") // 修改为实际的API基础URL
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build()
    }

    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit): ApiService {
        Log.e(TAG, "provideApiService: ")
        return retrofit.create(ApiService::class.java)
    }

}

